package com.baselibrary.libs.Utils.Notification.UtilsNotification;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.NotificationCompat;

import com.baselibrary.libs.R;

import static android.content.Context.NOTIFICATION_SERVICE;

/**
 * Created by Administrator 于萌萌
 * 创建日期: 13:42 . 2017年03月07日
 * 描述:
 * <p>
 * <p>
 * 备注:
 */

public class UtilsNotification {





    public static void startNotification(Context context,Class<?> activity,String ss) {

        NotificationCollocation collocation = getCollocation( ss);



        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);




        mBuilder.setContentTitle(collocation.getContentTitle())
                .setContentText(collocation.getContentText()) //设置通知栏显示内容
                //.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图
                .setContentIntent(getDefalutIntent(context, Notification.FLAG_AUTO_CANCEL,activity)) //设置通知栏点击意图
//  .setNumber(number) //设置通知集合的数量
                .setTicker(collocation.getTicker()) //通知首次出现在通知栏，带上升动画效果的
                //通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
                .setWhen(collocation.getWhen())

                .setPriority(collocation.getPriority()) //设置该通知优先级
//  .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
                .setOngoing(collocation.isOngoing())//ture，设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
                .setDefaults(collocation.getDefaults())//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置，使用defaults属性，可以组合
                //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
                //设置通知小ICON
                .setSmallIcon(collocation.getSmallIcon())
        ;
        Notification build = mBuilder.build();
        //这里是设置通知栏 点击之后是否消失
        build.flags = Notification.FLAG_AUTO_CANCEL;
        mNotificationManager.notify(1, build);
    }


    private static PendingIntent getDefalutIntent(Context context, int flags,Class<?> activity){
        Intent intent = new Intent(context, activity);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent= PendingIntent.getActivity(context, 1, intent, flags);
        //  PendingIntent pIntent = PendingIntent.getActivity(context, 1, intent,PendingIntent.FLAG_ONE_SHOT);
        return pendingIntent;
    }

    private static NotificationCollocation getCollocation(String ss){
        NotificationCollocation collocation= new NotificationCollocation();
        collocation
                .setContentTitle("测试标题")
                .setContentText(ss)
                .setTicker("测试通知来啦")
                .setWhen(System.currentTimeMillis())
                .setPriority(Notification.PRIORITY_MAX)
                .setOngoing(false)
                .setDefaults(Notification.DEFAULT_ALL)
                .setSmallIcon(R.drawable.ic_launcher)
        ;

        return collocation;
    }


    static class  NotificationCollocation{
        //设置通知栏标题
       private String contentTitle;
        //设置通知栏显示内容
        private String contentText;
        //通知首次出现在通知栏，带上升动画效果的
        private String ticker;
        //通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
        private long when;
        //设置该通知优先级
        private int priority;
        //设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
        private boolean ongoing;
        //向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置，使用defaults属性，可以组合
        private int defaults;
        //设置小图标
        private int smallIcon;

        /**
         * 设置通知栏标题
         * @param title
         * @return
         */
        public NotificationCollocation setContentTitle(String title){
            contentTitle = title;
            return this;
        }

        /**
         *
         * @param text
         * @return
         */
        public NotificationCollocation setContentText(String text){
            contentText = text;
            return this;
        }

        /**
         *
         * @param ticker
         * @return
         */
        public NotificationCollocation setTicker(String ticker){
            this.ticker = ticker;
            return this;
        }

        /**
         *
         * @param when
         * @return
         */
        public NotificationCollocation setWhen(long when){
            this.when = when;
            return this;
        }

        /**
         *
         * @param priority
         *
         *        默认优先级用于没有特殊优先级分类的通知。
         *        Notification.PRIORITY_DEFAULT
         *
         *        高优先级用于重要的通信内容，例如短消息或者聊天，这些都是对用户来说比较有兴趣的。
         *        Notification.PRIORITY_HIGH
         *
         *        低优先级可以通知用户但又不是很紧急的事件。
         *        Notification.PRIORITY_LOW
         *
         *        重要而紧急的通知，通知用户这个事件是时间上紧迫的或者需要立即处理的。
         *        Notification.PRIORITY_MAX
         *
         *        于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标，只有用户下拉通知抽屉才能看到内容。
         *        Notification.PRIORITY_MIN
         * @return
         */
        public NotificationCollocation setPriority(int priority){
            this.priority = priority;
            return this;
        }

        /**
         *
         * @param ongoing
         * @return
         */
        public NotificationCollocation setOngoing(boolean ongoing){
            this.ongoing = ongoing;
            return this;
        }

        /**
         *
         * @param defaults
         * @return
         */
        public NotificationCollocation setDefaults(int defaults){
            this.defaults = defaults;
            return this;
        }

        /**
         *
         * @param smallIcon
         * @return
         */
        public NotificationCollocation setSmallIcon(int smallIcon){
            this.smallIcon = smallIcon;
            return this;
        }

        /**
         *
         * @return
         */
        public String getContentTitle() {
            return contentTitle;
        }


        public String getContentText() {
            return contentText;
        }

        public String getTicker() {
            return ticker;
        }

        public long getWhen() {
            return when;
        }

        public int getPriority() {
            return priority;
        }

        public boolean isOngoing() {
            return ongoing;
        }

        public int getDefaults() {
            return defaults;
        }

        public int getSmallIcon() {
            return smallIcon;
        }
    }
}
